home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 September / PCWorld_2007-09_cd.bin / system / ntfs / ntfsundelete.exe / {app} / linecache.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2007-02-05  |  3KB  |  119 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''Cache lines from files.
  5.  
  6. This is intended to read lines from modules imported -- hence if a filename
  7. is not found, it will look down the module search path for a file by
  8. that name.
  9. '''
  10. import sys
  11. import os
  12. __all__ = [
  13.     'getline',
  14.     'clearcache',
  15.     'checkcache']
  16.  
  17. def getline(filename, lineno):
  18.     lines = getlines(filename)
  19.     if lineno <= lineno:
  20.         pass
  21.     elif lineno <= len(lines):
  22.         return lines[lineno - 1]
  23.     else:
  24.         return ''
  25.  
  26. cache = { }
  27.  
  28. def clearcache():
  29.     '''Clear the cache entirely.'''
  30.     global cache
  31.     cache = { }
  32.  
  33.  
  34. def getlines(filename):
  35.     """Get the lines for a file from the cache.
  36.     Update the cache if it doesn't contain an entry for this file already."""
  37.     if filename in cache:
  38.         return cache[filename][2]
  39.     else:
  40.         return updatecache(filename)
  41.  
  42.  
  43. def checkcache(filename = None):
  44.     '''Discard cache entries that are out of date.
  45.     (This is not checked upon each call!)'''
  46.     if filename is None:
  47.         filenames = cache.keys()
  48.     elif filename in cache:
  49.         filenames = [
  50.             filename]
  51.     else:
  52.         return None
  53.     for filename in filenames:
  54.         (size, mtime, lines, fullname) = cache[filename]
  55.         
  56.         try:
  57.             stat = os.stat(fullname)
  58.         except os.error:
  59.             del cache[filename]
  60.             continue
  61.  
  62.         if size != stat.st_size or mtime != stat.st_mtime:
  63.             del cache[filename]
  64.             continue
  65.     
  66.  
  67.  
  68. def updatecache(filename):
  69.     """Update a cache entry and return its list of lines.
  70.     If something's wrong, print a message, discard the cache entry,
  71.     and return an empty list."""
  72.     if filename in cache:
  73.         del cache[filename]
  74.     
  75.     if not filename or filename[0] + filename[-1] == '<>':
  76.         return []
  77.     
  78.     fullname = filename
  79.     
  80.     try:
  81.         stat = os.stat(fullname)
  82.     except os.error:
  83.         msg = None
  84.         basename = os.path.split(filename)[1]
  85.         for dirname in sys.path:
  86.             
  87.             try:
  88.                 fullname = os.path.join(dirname, basename)
  89.             except (TypeError, AttributeError):
  90.                 continue
  91.  
  92.             
  93.             try:
  94.                 stat = os.stat(fullname)
  95.             continue
  96.             except os.error:
  97.                 continue
  98.             
  99.  
  100.         else:
  101.             return []
  102.     except:
  103.         None<EXCEPTION MATCH>os.error
  104.  
  105.     
  106.     try:
  107.         fp = open(fullname, 'rU')
  108.         lines = fp.readlines()
  109.         fp.close()
  110.     except IOError:
  111.         msg = None
  112.         return []
  113.  
  114.     size = stat.st_size
  115.     mtime = stat.st_mtime
  116.     cache[filename] = (size, mtime, lines, fullname)
  117.     return lines
  118.  
  119.